package mx.gob.imss.reiman.clientes.web.beans;

import java.io.IOException;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.util.ArrayList;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.xml.soap.SOAPException;

import mx.gob.imss.reiman.clientes.model.Error;
import mx.gob.imss.reiman.clientes.model.mensajes.MensajeIMP;
import mx.gob.imss.reiman.clientes.service.MensajeriaService;
import mx.gob.imss.reiman.clientes.util.EndPoints;
import mx.gob.imss.reiman.clientes.web.util.FacesUtils;

import org.apache.xmlbeans.XmlException;

/**
 * 
 * @author Alberto Dzul Calvillo
 * @version 1.0
 * 
 */
@ManagedBean(name = "consultaIMP", eager = true)
@ViewScoped
public class IMPConsultaMB extends Bean implements Serializable {
	private static final long serialVersionUID = 1L;
	private MensajeIMP mensaje = new MensajeIMP();
	@ManagedProperty("#{consultaIMPService}")
	private MensajeriaService mensajeriaService;

	public void consultar() {
		logger.info("consultandoIMP");
		mensaje.setErrores(new ArrayList<Error>());
		try {
			mensajeriaService.enviar(mensaje, EndPoints.CONSULTAR_IMP);
			if (!mensaje.getTienePersonas()) {
				FacesUtils.addErrorMessage("No se encontraron resultados");
			}
		} catch (MalformedURLException e) {
			logger.error(e.getMessage());
			FacesUtils.addErrorMessage(rb.getString("error.endpoint"));
		} catch (UnsupportedOperationException e) {
			logger.error(e.getMessage());
			FacesUtils.addErrorMessage(rb.getString("error.metodo"));
		} catch (XmlException e) {
			logger.error(e.getMessage());
			FacesUtils.addErrorMessage(rb.getString("error.xml"));
		} catch (SOAPException e) {
			logger.error(e.getMessage());
			FacesUtils.addErrorMessage(rb.getString("error.soap"));
		} catch (IOException e) {
			logger.error(e.getMessage());
			FacesUtils.addErrorMessage(rb.getString("error.io"));
		}
	}

	public MensajeIMP getMensaje() {
		return mensaje;
	}

	public void setMensaje(MensajeIMP mensaje) {
		this.mensaje = mensaje;
	}

	public void setMensajeriaService(MensajeriaService mensajeriaService) {
		this.mensajeriaService = mensajeriaService;
	}
}